public class TrimBST {

    public TreeNode trimBST(TreeNode root, int low, int high) {
        if (root == null) return null;
        if (root.val < low) {
            return trimBST(root.right, low, high);
        } else if (root.val == low) {
            root.left = null;
            root.right = trimBST(root.right, low, high);
            return root;
        } else if (root.val > low && root.val < high) {
            root.left = trimBST(root.left, low, high);
            root.right = trimBST(root.right, low, high);
            return root;
        } else if (root.val == high) {
            root.right = null;
            root.left = trimBST(root.left, low, high);
            return root;
        } else {
            return trimBST(root.left, low, high);
        }
    }
}
